﻿using Microsoft.Extensions.DependencyInjection;
using Microsoft.AspNetCore.Http;
using System.Web;

namespace YiSha.Util;

public class CookieHelper
{
    /// <summary>
    /// 写cookie值
    /// </summary>
    /// <param name="sName">名称</param>
    /// <param name="sValue">值</param>
    /// <param name="httpOnly">true代表浏览器的js不能获取到的cookie</param>
    public void WriteCookie(string sName, string sValue, bool httpOnly = true)
    {
        IHttpContextAccessor hca = GlobalContext.ServiceProvider?.GetService<IHttpContextAccessor>();
        CookieOptions option = new CookieOptions();
        option.Expires = DateTime.Now.AddDays(30);
        option.HttpOnly = httpOnly;
        option.SameSite = SameSiteMode.Lax;
        hca?.HttpContext?.Response.Cookies.Append(sName, sValue, option);
    }

    /// <summary>
    /// 写cookie值
    /// </summary>
    /// <param name="sName">名称</param>
    /// <param name="sValue">值</param>
    /// <param name="expires">过期时间(分钟)</param>
    /// <param name="httpOnly">true代表浏览器的js不能获取到的cookie</param>
    public void WriteCookie(string sName, string sValue, int expires, bool httpOnly = true)
    {
        IHttpContextAccessor hca = GlobalContext.ServiceProvider?.GetService<IHttpContextAccessor>();
        CookieOptions option = new CookieOptions();
        option.Expires = DateTime.Now.AddMinutes(expires);
        option.HttpOnly = httpOnly;
        option.SameSite = SameSiteMode.Lax;
        hca?.HttpContext?.Response.Cookies.Append(sName, sValue, option);
    }

    /// <summary>
    /// 读cookie值
    /// </summary>
    /// <param name="sName">名称</param>
    /// <returns>cookie值</returns>
    public string GetCookie(string sName)
    {
        IHttpContextAccessor hca = GlobalContext.ServiceProvider?.GetService<IHttpContextAccessor>();
        return hca?.HttpContext?.Request.Cookies[sName];
    }

    /// <summary>
    /// 删除Cookie对象
    /// </summary>
    /// <param name="sName">Cookie对象名称</param>
    public void RemoveCookie(string sName)
    {
        IHttpContextAccessor hca = GlobalContext.ServiceProvider?.GetService<IHttpContextAccessor>();
        hca?.HttpContext?.Response.Cookies.Delete(sName);
    }
}